﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.Runtime.Serialization;
using LinkShareWpf.Properties;

namespace UniCT.LinkShareWpf.Model
{
    // La decorazione [DataContract]: si tratta di un oggetto che viene utilizzato all'interno del contratto
    // (definisce metodi e oggetti scambiati nella comunicazione). 
    // Questo perché potrebbero esserci dei campi che nella comunicazione non interessano:
    // in quel caso, se non si mette la decorazione DataMember essi non vengono presi in considerazione.  
    [DataContract]
    public class NetFilter : Filter
    {
        // E' la lista di URI dove il NetFilter è passato.
        // Ogni nodo che riceve questo oggetto, aggiunge il proprio Uri alla lista e poi lo spedisce ai suoi nodi
        // DataMember indica le proprietà o i campi che vogliamo serializzare
        [DataMember]
        private LinkedList<Uri> nodes;
        [DataMember]
        private Guid id;
        [DataMember]
        private int ttl;
        [DataMember]
        private Uri sender;

        public Guid Id
        {
            get { return id; }
            set { id = value; }
        }

        public int TTL
        {
            get { return ttl; }
        }

        public Uri Sender
        {
            get { return sender; }
        }

        public LinkedList<Uri> Nodes
        {
            get { return nodes; }
        }

        public void addNode(Uri node)
        {
            nodes.AddFirst(node);
        }

        public NetFilter()
        {
            nodes = new LinkedList<Uri>();
            sender = Settings.Default.UriServer;
            ttl = Settings.Default.TTL;
        }

        public void DeHop()
        {
            ttl--;
        }

    }
}
